package com.bysc.cmsservice.service.impl;

import com.bysc.commonutils.constant.MessageConstant;
import com.bysc.commonutils.utils.DateUtil;
import com.bysc.baseservice.handler.BaiYunException;
import com.bysc.commonutils.ResultCode;
import com.bysc.commonutils.utils.JwtUtils;
import com.bysc.commonutils.vo.CmsActivity;
import com.bysc.cmsservice.mapper.CmsActivityMapper;
import com.bysc.cmsservice.service.CmsActivityService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

import javax.servlet.http.HttpServletRequest;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * <p>
 * 活动表 服务实现类
 * </p>
 *
 * @author kkk
 * @since 2024-10-24
 */
@Service
public class CmsActivityServiceImpl extends ServiceImpl<CmsActivityMapper, CmsActivity> implements CmsActivityService {
    @Override
    public boolean save(CmsActivity cmsActivity) {
        //取出报名时间活动时间做判断
        //先把时间字符串转换为Date类型
        // 获取活动的时间字段
        Date joinStart = cn.hutool.core.date.DateUtil.parse(cmsActivity.getJoinStart(),"yyyy-MM-dd HH:mm:ss");
        Date joinEnd = cn.hutool.core.date.DateUtil.parse(cmsActivity.getJoinEnd(),"yyyy-MM-dd HH:mm:ss");
        Date activityStart = cn.hutool.core.date.DateUtil.parse(cmsActivity.getActivityStart(),"yyyy-MM-dd HH:mm:ss");
        Date activityEnd = cn.hutool.core.date.DateUtil.parse(cmsActivity.getActivityEnd(),"yyyy-MM-dd HH:mm:ss");
        if (joinStart != null && joinEnd != null && joinEnd.before(joinStart)) {
            throw new BaiYunException(ResultCode.ERROR ,"报名时间开始时间必须大于结束时间");
        }
        if (joinStart != null && joinEnd != null && activityStart != null && activityStart.before(joinEnd)) {
            throw new BaiYunException(ResultCode.ERROR ,"活动时间必须大于报名时间");
        }
        if (activityStart != null && activityEnd != null && activityEnd.before(activityStart)) {
            throw new BaiYunException(ResultCode.ERROR ,"活动时间开始时间必须大于结束时间");
        }
        if ("".equals(cmsActivity.getClubId())) {
            throw new BaiYunException(ResultCode.ERROR, MessageConstant.CLUB_NOT_EXIST);
        }
        return super.save(cmsActivity);
    }

    @Override
    public void parseAndInsertActivity(String activityMessage, HttpServletRequest userRequest) {
        String clubId = JwtUtils.getClubIdByJwtToken(userRequest);

        /*
*
* activityMessage为：好的，我将为您策划一场活动。以下是我为您设计的活动方案：\n\n活动名称：未来科技论坛\n活动类型：学术\n活动地址：国际会议中心\n活动报名开始时间：2025-01-15 09:00:00\n活动报名截至时间：2025-02-15 18:00:00\n活动开始时间：2025-03-01 09:00:00\n活动结束时间：2025-03-02 18:00:00\n活动人数限制：500\n活动规则：参与者需提前注册，携带个人身份证件签到入场。\n评分标准：根据演讲内容的创新性、实用性和表达能力进行评分。\n奖项设置：最佳创新奖、最佳实用奖、最佳表达奖，各奖项设有奖金和证书。\n参赛对象要求：科技领域研究人员、学者和企业家。\n联系方式：techforum2025@example.com\n\n请确认以上方案是否符合您的要求？若不符合，请指出需要修改的部分。需要解析
* */
        // 解析活动信息
        Map<String, String> activityInfo = parseActivityMessage(activityMessage);

        // 创建 CmsActivity 对象
        CmsActivity cmsActivity = new CmsActivity();

        // 填充对象字段
        cmsActivity.setSubject(activityInfo.get("活动名称"));
        cmsActivity.setActivityType(activityInfo.get("活动类型"));
        cmsActivity.setAddress(activityInfo.get("活动地址"));
        cmsActivity.setJoinStart(activityInfo.get("活动报名开始时间"));
        cmsActivity.setJoinEnd(activityInfo.get("活动报名截至时间"));
        cmsActivity.setActivityStart(activityInfo.get("活动开始时间"));
        cmsActivity.setActivityEnd(activityInfo.get("活动结束时间"));
        cmsActivity.setRules(activityInfo.get("活动规则"));
        cmsActivity.setEvaluationCriteria(activityInfo.get("评分标准"));
        cmsActivity.setAwardSettings(activityInfo.get("奖项设置"));
        cmsActivity.setParticipantRequirements(activityInfo.get("参赛对象要求"));
        cmsActivity.setContactInfo(activityInfo.get("联系方式"));
        cmsActivity.setALimit(Integer.parseInt(activityInfo.get("活动人数限制")));
        cmsActivity.setClubId(clubId);
        // 插入数据库
        this.save(cmsActivity);
    }
    private Map<String, String> parseActivityMessage(String message) {
        Map<String, String> activityInfo = new HashMap<>();
        String[] lines = message.split("\n");
        boolean parsing = false;

        for (String line : lines) {
            line = line.trim();
            // 开始解析的标志
            if (line.startsWith("活动名称：")) {
                parsing = true;
            }
            // 结束解析的标志-请确认以上方案是否符合您的要求？
            if (line.startsWith("请确认")) {
                parsing = false;
            }
            // 跳过不需要解析的行
            if (!parsing) {
                continue;
            }
            // 提取键值对
            if (line.contains("：")) {
                String[] parts = line.split("：", 2);
                if (parts.length == 2) {
                    activityInfo.put(parts[0].trim(), parts[1].trim());
                }
            }
        }

        return activityInfo;
    }

}
